package br.com.AC.modelo;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;

import br.com.AC.entidades.Dependente;
import br.com.AC.entidades.Imc;
import br.com.AC.entidades.Medico;
import br.com.AC.entidades.Paciente;
import br.com.AC.entidades.Usuario;

public class LoginModel {
	

	Paciente pac = new Paciente();
	Dependente dep = new Dependente();
	Imc imc = new Imc();
	Usuario usu = new Usuario();
	Medico med = new Medico();
//	MedicoPK medPK = new MedicoPK();
//	AgendaMed amed = new AgendaMed();
    

	public String pesqCPF(String cpf, String tipo) {  
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("tcc");
		EntityManager em = emf.createEntityManager();
		 try {                 
			 Query query = em.createQuery("FROM Usuario WHERE cpf = :cpf AND "
	            												+" tpUsu = :tipo");    
	         query.setParameter("cpf", cpf);              
	         query.setParameter("tipo", tipo);
	         Usuario result = (Usuario) query.getSingleResult();
	            
	         return "ok";
	            	
	        }   
	        catch (Exception e) {  
	            System.out.println("Erro:   "+e);  
	            return "fail";  
	        }   
	        finally {  
	        }  
	    }
	
	public String inlcuirPaciente(Object usuario, Object paciente, Object imcp) 
	{
		
		try{

			EntityManagerFactory emf = Persistence.createEntityManagerFactory("tcc");

            EntityManager em = emf.createEntityManager();

            EntityTransaction tx = em.getTransaction();
			tx.begin();

			usu = (Usuario) usuario;
			
			em.persist(usu);

			tx.commit();
			
			Query query = em.createQuery("FROM Usuario WHERE cpf = :cpf AND "+" tpUsu = :tipo");    
			query.setParameter("cpf", usu.getCpf());              
			query.setParameter("tipo", usu.getTpUsu());
			Usuario result = (Usuario) query.getSingleResult();

			tx.begin();

			pac = (Paciente) paciente;

			pac.setUsuario_id_usuario(result.getIdUsuario());
			
			em.persist(pac);

			imc = (Imc) imcp;

			imc.setPaciente_Usuario_id_usuario(result.getIdUsuario());

			em.persist(imc);
			
			tx.commit();
			
			em.close();
	}
	catch (Exception e) {
		return "fail";
	}	

	return"ok";
	}
	
	public String inlcuirPacienteDep(Object usuario, Object paciente, Object imcp, Object dependente) 
	{
		
		try{

			EntityManagerFactory emf = Persistence.createEntityManagerFactory("tcc");

            EntityManager em = emf.createEntityManager();

            EntityTransaction tx = em.getTransaction();
			tx.begin();

			em.persist(usu);

			usu = (Usuario) usuario;
			
			pac = (Paciente) paciente;

			pac.setUsuario_id_usuario(usu.getIdUsuario());
			
			em.persist(pac);

			imc = (Imc) imcp;

			imc.setPaciente_Usuario_id_usuario(usu.getIdUsuario());

			em.persist(imc);
			
			dep = (Dependente) dependente;
			
			dep.setPaciente_Usuario_id_usuario(usu.getIdUsuario());
			
			em.persist(dep);
			
			tx.commit();
			
			em.close();
	}
	catch (Exception e) {
		return "fail";
	}	

	return"ok";
	}
	
	public String incluirMedico(Object usuario, Object medico) 	
	{
		
		try{
			

			EntityManagerFactory emf = Persistence.createEntityManagerFactory("tcc");

            EntityManager em = emf.createEntityManager();

            EntityTransaction tx = em.getTransaction();
			tx.begin();

			usu = (Usuario) usuario;

			em.persist(usu);
			
			tx.commit();
			
			Query query = em.createQuery("FROM Usuario WHERE cpf = :cpf AND "+" tpUsu = :tipo");    
			query.setParameter("cpf", usu.getCpf());              
			query.setParameter("tipo", usu.getTpUsu());
			Usuario result = (Usuario) query.getSingleResult();

			tx.begin();

			med = (Medico) medico;
			
			med.setUsuario_id_usuario(result.getIdUsuario());
			
			em.persist(med);
	
			tx.commit();
			
			em.close();
	}
	catch (Exception e) {
		System.out.println(e);
		if(e.getMessage().contains("'login_UNIQUE'"))
		{
			return "loginDuplicate";
		}
		else
		{
			return "fail";
		}
	}	

	return"ok";
	}


	
	public String atualizaImc(Object imcp) 
	{
		
		try{
	
			EntityManagerFactory emf = Persistence.createEntityManagerFactory("tcc");
	
	        EntityManager em = emf.createEntityManager();
	
	        EntityTransaction tx = em.getTransaction();
			tx.begin();
	
			imc = (Imc) imcp;
	
			em.persist(imc);
			
			tx.commit();
			
			em.close();
		}
		catch (Exception e) {
			return "fail";
		}	
	
	return"ok";
	}
}
